package com.mocha.datastore;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class BaseStore {
	private Map<String, BaseItem> storeItemMap = new HashMap<String, BaseItem>();
	private List<BaseItem> storeItemList = new ArrayList<BaseItem>();
	
	public BaseStore() {
		storeItemMap.clear();
		storeItemList.clear();
	}
	
	public int getCount() {
		return storeItemList.size();
	}
	
	public BaseItem getAt(int index) {
		return storeItemList.get(index);
	}
	
	public BaseItem getItem(String title) {
		return storeItemMap.get(title);
	}
	
	public int add(BaseItem storeItem) {
		try {
			storeItemMap.put(storeItem.title, storeItem);
			storeItemList.add(storeItem);
			return storeItemList.size() - 1;
		}
		catch(Exception e) {
			return -1;
		}
	}
	
	public boolean remove(BaseItem storeItem) {
		try {
			storeItemMap.remove(storeItem.title);
			storeItemList.remove(storeItem);
			return true;
		}
		catch(Exception e) {
			return false;
		}
	}
}

public class DataStore {
	private static DataStore dataStoreInstance = null;
	private Map<String, BaseStore> storeMap = new HashMap<String, BaseStore>();
	private static String[] items = {"AccountBook", "Diary", "Todo"};
		
	public DataStore() {
		initDataStore();
	}
	
	static DataStore getInstance() {
		if(dataStoreInstance == null) {
			dataStoreInstance = new DataStore();
		}
		return dataStoreInstance;
	}
	
	public BaseStore getStore(String storeName) {
		BaseStore item = (BaseStore)storeMap.get(storeName);
		return item;
	}
	
	public void addStore(String storeName, BaseStore storeItem) {
		storeMap.put(storeName, storeItem);
	}
	
	private void initDataStore() {
		storeMap.clear();
		for(String item : items) {
			addStore(item, new BaseStore());
		}
	}
	
	// Todo: DB interfaces
}
